import Taro from '@tarojs/taro';
import { useEffect, useRef } from 'react';

const defaultLoadingOptions = { title: '加载中' };

/**
 *  自动关闭的 loading
 * @param {number} delay loading默认关闭时间
 * @param {boolean} isShow 是否显示loading, 默认为true
 * @param {object} loadingOptions
 * @returns {function} 主动关闭loading
 */
const useAutoHideLoading = (
  delay = 3000,
  isShow = true,
  loadingOptions = defaultLoadingOptions,
) => {
  // 超时定时器
  const timer = useRef();

  // 是否已经隐藏, 即显示过一次以后, 不会再显示了
  const isHideRef = useRef(false);

  // 是否显示 loading
  useEffect(() => {
    // 如果不需要显示, 直接略过
    if (!isShow) {
      return;
    }

    Taro.showLoading(loadingOptions);

    clearTimeout(timer.current);
    timer.current = setTimeout(() => {
      if (isHideRef.current) {
        return;
      }

      isHideRef.current = true;
      Taro.hideLoading();
    }, delay);
  }, [loadingOptions, isShow]);

  return () => {
    if (!isShow) {
      return;
    }

    isHideRef.current = true;
    Taro.hideLoading();

    clearTimeout(timer.current);
  };
};

export { useAutoHideLoading };
